📝 Резюме · 📄 Оригинал (628 B)
https://t.me/Python_libr/3365
Data Science для начинающих
Источник: https://t.me/Python_libr/3365
Что такое Data Science?
Data Science — это область, объединяющая статистику, программирование и бизнес-знания для извлечения полезной информации из данных. Для начинающих ключевые навыки:
- Обработка и чистка данных
- Визуализация результатов
- Базовый анализ и статистика
- Развёртывание приложений
Необходимые библиотеки
pip install pandas numpy matplotlib seaborn scikit-learn jupyter
Загрузка и исследование данных
import pandas as pd
import numpy as np
# Загрузка данных из CSV
df = pd.read_csv('data.csv')
# Первичное исследование
print(df.head()) # Первые 5 строк
print(df.info()) # Типы данных и количество значений
print(df.describe()) # Статистика (mean, std, min, max)
print(df.shape) # Размер (строки, столбцы)
# Проверка пропусков
print(df.isnull().sum()) # Количество пропусков по столбцам
# Базовая статистика
print(df['возраст'].mean())
print(df['город'].value_counts())
Чистка и обработка данных
import pandas as pd
# Удаление пропусков
df_clean = df.dropna() # Удалить строки с пропусками
df_clean = df.fillna(0) # Заполнить нулями
df_clean = df.fillna(df.mean()) # Заполнить средним значением
# Удаление дубликатов
df_clean = df.drop_duplicates()
# Типы данных
df['дата'] = pd.to_datetime(df['дата'])
df['категория'] = df['категория'].astype('category')
# Фильтрация
df_filtered = df[df['возраст'] > 30]
df_filtered = df[(df['возраст'] > 20) & (df['город'] == 'Москва')]
# Группировка и агрегация
grouped = df.groupby('город')['зарплата'].mean()
print(grouped)
# москва 150000
# спб 140000
# Переименование и удаление столбцов
df = df.rename(columns={'возраст': 'age'})
df = df.drop(['лишний_столбец'], axis=1)
Визуализация данных
import matplotlib.pyplot as plt
import seaborn as sns
# Стиль графиков
sns.set_style("whitegrid")
plt.rcParams['figure.figsize'] = (12, 6)
# Гистограмма
plt.figure(figsize=(10, 5))
plt.hist(df['возраст'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('Возраст')
plt.ylabel('Частота')
plt.title('Распределение по возрастам')
plt.show()
# Диаграмма рассеяния
plt.scatter(df['опыт'], df['зарплата'], alpha=0.6)
plt.xlabel('Опыт (годы)')
plt.ylabel('Зарплата (руб)')
plt.title('Зависимость зарплаты от опыта')
plt.show()
# График для категорических данных
df.groupby('город')['зарплата'].mean().plot(kind='bar')
plt.ylabel('Средняя зарплата')
plt.title('Зарплата по городам')
plt.xticks(rotation=45)
plt.show()
# Тепловая карта корреляции
correlation = df[['возраст', 'опыт', 'зарплата']].corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.show()
Базовые статистические методы
import scipy.stats as stats
# Среднее, медиана, мода
mean = df['зарплата'].mean()
median = df['зарплата'].median()
mode = df['зарплата'].mode()[0]
# Стандартное отклонение и корреляция
std = df['зарплата'].std()
correlation = df['опыт'].corr(df['зарплата'])
# Статистический тест: есть ли разница между группами?
group1 = df[df['город'] == 'Москва']['зарплата']
group2 = df[df['город'] == 'СПБ']['зарплата']
t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"p-value: {p_value}") # Если < 0.05, то разница значима
# Распределение нормальное?
statistic, p_value = stats.shapiro(df['зарплата'])
print(f"Нормальное ли распределение? {p_value > 0.05}")
Машинное обучение для начинающих
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score, mean_squared_error
# Подготовка данных
X = df[['опыт', 'образование']] # Признаки
y = df['зарплата'] # Целевая переменная
# Разделение на обучение и тест
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Модель линейной регрессии
model = LinearRegression()
model.fit(X_train, y_train)
# Предсказание
predictions = model.predict(X_test)
# Оценка модели
r2 = r2_score(y_test, predictions)
rmse = np.sqrt(mean_squared_error(y_test, predictions))
print(f"R² score: {r2:.3f}")
print(f"RMSE: {rmse:.2f}")
# Более сложная модель: случайный лес
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
rf_predictions = rf_model.predict(X_test)
rf_r2 = r2_score(y_test, rf_predictions)
print(f"Random Forest R²: {rf_r2:.3f}")
Типичный workflow анализа данных
graph TD
A["Загрузка<br/>данных"] --> B["Исследование<br/>EDA"]
B --> C["Чистка<br/>данных"]
C --> D["Трансформация<br/>признаков"]
D --> E["Анализ<br/>и визуализация"]
E --> F{Нужно ли<br/>обучение?}
F -->|Да| G["Выбор модели"]
G --> H["Обучение"]
H --> I["Оценка"]
I --> J{Хорошие<br/>результаты?}
J -->|Нет| K["Оптимизация"]
K --> I
J -->|Да| L["Развёртывание"]
Развёртывание моделей
import pickle
import joblib
# Сохранение модели
joblib.dump(model, 'my_model.pkl')
# Загрузка модели позже
loaded_model = joblib.load('my_model.pkl')
# Создание простого Flask приложения
from flask import Flask, request, jsonify
app = Flask(__name__)
model = joblib.load('my_model.pkl')
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
features = [[data['опыт'], data['образование']]]
prediction = model.predict(features)[0]
return jsonify({'зарплата': prediction})
if __name__ == '__main__':
app.run(debug=True)
Лучшие практики
- Начните с исследования (EDA) — поймите ваши данные
- Документируйте процесс — используйте Jupyter notebooks
- Проверяйте качество данных — пропуски, выбросы, дубликаты
- Не переусложняйте — часто простая модель лучше чем сложная
- Кроссвалидация — оценивайте модель правильно
- Начните с малого — используйте подмножество данных для экспериментов
- Визуализируйте результаты — графики помогут понять результаты
- Переиспользуйте код — создавайте утилиты для повторяющихся задач
Полезные ресурсы
- Pandas документация для работы с таблицами
- Scikit-learn для машинного обучения
- Matplotlib/Seaborn для визуализации
- Kaggle для датасетов и соревнований